Computer-generated images are often created by examining a geometric model of a view space and modeled objects in the view space. The geometric model of the objects can have arbitrary resolution, but typically each object is represented by a finite number of polygons, such as triangles, positioned in the view space and having a color, color pattern, or texture over their surface and/or an alpha value or values representing transparency of the polygon. An image is typically output (i.e., stored, displayed, transmitted, or otherwise processed) as a pixel array.
One common feature of computer-generated images is to include reflections in the image that is output. Including reflections provides for more visually realistic results. In certain applications, such as animated films, ray tracing techniques can be used to provide ray traced reflections, which gives good results. However, ray tracing is computationally expensive. For complex scenes, it may take hours or days to renders a single frame of a video sequence using ray traced reflections, even when using very powerful computers or render farms.
In other applications, such as video games, computational speed is a priority. In video games, frames are rendered very quickly, i.e., in real-time or near real-time, as a user interacts with a video game. As such, ray tracing techniques for reflections (which can take hours or days to render a single frames) are not suitable for video games. For this reason, various other techniques have been developed to render reflections in video games in real-time or near-real time. However, these other techniques suffer from poor quality, particularly when compared to the reflections obtained from full ray tracing.
As such, there remains a need in the art for a system and method for rendering reflections that overcomes the drawbacks and limitations of existing approaches.